home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Programming / EasyPLUGINs / source / popasl.e < prev    next >
Encoding:
Text File  |  1998-02-10  |  11.1 KB  |  368 lines

  1. /*
  2. **
  3. ** popasl PLUGIN
  4. **
  5. ** Copyright: Ralph Wermke of Digital Innovations
  6. ** EMail    : wermke@gryps1.rz.uni-greifswald.de
  7. ** WWW      : http://di.home.pages.de
  8. **
  9. ** Version  : 1.2
  10. ** Date     : 10-Feb-1998
  11. **
  12. ** ProgramID: 0007
  13. **
  14. ** History:
  15. **    10-Nov-1997:      [1.0]
  16. **       - initial release
  17. **    15-Nov-1997:      [1.0.1]
  18. **       - object name changed to popasl_plugin
  19. **    15-Dec-1997:      [1.1]
  20. **       - two new tags added
  21. **         PLA_PopAsl_ButtonOnRight    [I..]
  22. **         PLA_PopAsl_NoFontExtension  [I..]
  23. **    10-Feb-1998:      [1.2]
  24. **       - two new tags added
  25. **         PLA_PopAsl_UserData         [ISG]
  26. **         PLA_PopAsl_Title            [IS.]
  27. **
  28. */
  29.  
  30. OPT OSVERSION=38
  31. OPT PREPROCESS
  32. OPT MODULE
  33.  
  34. MODULE 'tools/easygui','tools/textlen',
  35.        'graphics/text',
  36.        'intuition/intuition','intuition/gadgetclass',
  37.        'utility/tagitem','utility',
  38.        'gadtools',
  39.        'libraries/gadtools','libraries/asl',
  40.        'asl'
  41.  
  42. EXPORT OBJECT popasl_plugin OF plugin PRIVATE
  43.    string      : PTR TO LONG
  44.    type
  45.    disabled
  46.  
  47.    gad_str     : PTR TO gadget
  48.    gad_bt      : PTR TO gadget
  49.    id_str
  50.    id_bt
  51.    bt_width
  52.    bt_text     : PTR TO CHAR
  53.    buttonright
  54.    noext
  55.    imsg        : PTR TO intuimessage
  56.  
  57.    ta          : PTR TO textattr
  58.  
  59.    title       :PTR TO CHAR
  60.    userdata
  61.  
  62. ENDOBJECT
  63.  
  64. -> TAG_USER  | PROG_ID<<16 | TAG_VALUE
  65. -> $80000000 |   $0007<<16 | 0...
  66.  
  67. EXPORT ENUM PLA_PopAsl_Disabled=$80070001,
  68.             PLA_PopAsl_Contents,
  69.             PLA_PopAsl_GadgetID,
  70.             PLA_PopAsl_ButtonText,
  71.             PLA_PopAsl_Type,
  72.             PLA_PopAsl_ButtonOnRight,
  73.             PLA_PopAsl_NoFontExtension,
  74.             PLA_PopAsl_Title,
  75.             PLA_PopAsl_UserData
  76.  
  77. EXPORT ENUM PLV_PopAsl_Type_Drawer=0,
  78.             PLV_PopAsl_Type_File,
  79.             PLV_PopAsl_Type_Font
  80. ->     ,PLV_PopAsl_Type_Screen
  81.  
  82.  
  83. ->-- Constructor/ Destructor ---------------------------------
  84.  
  85. ->>> popasl::popasl (Constructor)
  86. PROC popasl(tags=NIL:PTR TO tagitem) OF popasl_plugin
  87. DEF x, s:PTR TO CHAR, title:PTR TO CHAR, type
  88.  
  89.    IF utilitybase:=OpenLibrary('utility.library', 37)
  90.       self.disabled     :=GetTagData(PLA_PopAsl_Disabled, FALSE, tags)
  91.  
  92.       s                 :=GetTagData(PLA_PopAsl_Contents, '', tags)
  93.       self.string       :=String(StrLen(s)+1); StrCopy(self.string, s)
  94.  
  95.       self.id_bt        :=GetTagData(PLA_PopAsl_GadgetID, And(Shr(self,4),$FFFF), tags)
  96.       self.type         :=GetTagData(PLA_PopAsl_Type, PLV_PopAsl_Type_Drawer, tags)
  97.       self.bt_text      :=GetTagData(PLA_PopAsl_ButtonText, NIL, tags)
  98.       self.buttonright  :=GetTagData(PLA_PopAsl_ButtonOnRight, FALSE, tags)
  99.       self.noext        :=GetTagData(PLA_PopAsl_NoFontExtension, FALSE, tags)
  100.  
  101.       type:=self.type
  102.  
  103.       SELECT type
  104.  
  105.         CASE PLV_PopAsl_Type_Drawer;    title:='Select Drawer'
  106.         CASE PLV_PopAsl_Type_File;      title:='Select File'
  107.         CASE PLV_PopAsl_Type_Font;      title:='Select Font'
  108.  
  109.       ENDSELECT
  110.  
  111.       self.title        :=GetTagData(PLA_PopAsl_Title, title, tags)
  112.       self.userdata     :=GetTagData(PLA_PopAsl_UserData, NIL, tags)
  113.  
  114.       IF (self.bt_text=NIL)
  115.          x:=self.type
  116.          SELECT x
  117.             CASE PLV_PopAsl_Type_Drawer
  118.                self.bt_text:='Path...'
  119.             CASE PLV_PopAsl_Type_File
  120.                self.bt_text:='File...'
  121.             CASE PLV_PopAsl_Type_Font
  122.                self.bt_text:='Font...'
  123. ->            CASE PLV_PopAsl_Type_Screen
  124. ->               self.bt_text:='Screen...'
  125.             DEFAULT
  126.                Raise("TYPE")
  127.          ENDSELECT
  128.       ENDIF
  129.  
  130.       self.id_str:=self.id_bt+1
  131.  
  132.       CloseLibrary(utilitybase)
  133.    ELSE
  134.       Raise("util")
  135.    ENDIF
  136.  
  137. ENDPROC
  138. -><<
  139.  
  140. ->>> popasl::end (Destructor)
  141. PROC end() OF popasl_plugin
  142.    IF self.string THEN DisposeLink(self.string)
  143. ENDPROC
  144. -><<
  145.  
  146. ->-- overridden methods --------------------------------------
  147.  
  148. ->>> popasl::will_resize
  149. PROC will_resize() OF popasl_plugin IS RESIZEX
  150. -><<
  151.  
  152. ->>> popasl::min_size
  153. PROC min_size(ta:PTR TO textattr, fh) OF popasl_plugin
  154.    self.bt_width:=textlen(self.bt_text,ta)+8
  155. ENDPROC (self.bt_width+(fh*8)),(fh+6)
  156. -><<
  157.  
  158. ->>> popasl::gtrender
  159. PROC gtrender(gl, vis, ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF popasl_plugin
  160. DEF ng_bt, ng_str
  161.  
  162.    IF self.buttonright
  163.       ng_bt :=[x+xs-self.bt_width+1, y, self.bt_width, ys, self.bt_text, ta, self.id_bt, 0, vis, 0]:newgadget
  164.       ng_str:=[x, y, xs-self.bt_width, ys, NIL, ta, self.id_str, 0, vis, 0]:newgadget
  165.    ELSE
  166.       ng_bt :=[x, y, self.bt_width, ys, self.bt_text, ta, self.id_bt, 0, vis, 0]:newgadget
  167.       ng_str:=[x+self.bt_width+1, y, xs-self.bt_width, ys, NIL, ta, self.id_str, 0, vis, 0]:newgadget
  168.    ENDIF
  169.  
  170.    self.gad_bt:=CreateGadgetA(BUTTON_KIND, gl,
  171.                               ng_bt,
  172.                               [GA_DISABLED, self.disabled, TAG_DONE])
  173.  
  174.    self.gad_str:=CreateGadgetA(STRING_KIND, self.gad_bt,
  175.                                ng_str,
  176.                                [GA_DISABLED, self.disabled,
  177.                                 GTST_MAXCHARS, 350,
  178.                                 GTST_STRING, self.string,
  179.                                 TAG_DONE])
  180. ENDPROC self.gad_str
  181. -><<
  182.  
  183. ->>> popasl::clear_render
  184. PROC clear_render(win:PTR TO window) OF popasl_plugin
  185.  
  186.     DEF buffer:REG
  187.  
  188.     buffer:=self.gad_str.specialinfo::stringinfo.buffer
  189.  
  190.     IF self.string THEN DisposeLink(self.string)
  191.  
  192.     self.string:=String(StrLen(buffer)+1)
  193.  
  194.     StrCopy(self.string, buffer)
  195.  
  196. ENDPROC
  197. -><<
  198.  
  199. ->>> popasl::message_test
  200. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF popasl_plugin
  201.  
  202.    self.imsg:=0
  203.    IF imsg.class=IDCMP_GADGETUP
  204.       IF (imsg.iaddress=self.gad_bt) OR (imsg.iaddress=self.gad_str)
  205.          self.imsg:=imsg
  206.          RETURN TRUE
  207.       ENDIF
  208.    ENDIF
  209.  
  210. ENDPROC FALSE
  211. -><<
  212.  
  213. ->>> popasl::message_action
  214. PROC message_action(class, qual, code, win:PTR TO window) OF popasl_plugin
  215. DEF filereq:PTR TO filerequester, fontreq:PTR TO fontrequester,
  216.     res, len, buffer:REG, tags, x, s1=NIL:PTR TO CHAR, reqtype,
  217.     s=NIL:PTR TO CHAR
  218.  
  219.    IF self.imsg
  220.       buffer:=self.gad_str.specialinfo::stringinfo.buffer
  221.       IF self.imsg.iaddress=self.gad_bt
  222.          IF (aslbase:=OpenLibrary('asl.library', 38))
  223.             self.set(PLA_PopAsl_Disabled, TRUE)
  224.             x:=self.type
  225.             SELECT x
  226.                CASE PLV_PopAsl_Type_Drawer
  227.                   reqtype:=ASL_FILEREQUEST
  228.                   tags:=[ASLFR_WINDOW, win,
  229.                          ASLFR_SLEEPWINDOW, TRUE,
  230.                          ASLFR_TITLETEXT, self.title,
  231.                          ASLFR_INITIALDRAWER, buffer,
  232.                          ASLFR_DRAWERSONLY, TRUE,
  233.                          TAG_DONE]
  234.                CASE PLV_PopAsl_Type_File
  235.                   reqtype:=ASL_FILEREQUEST
  236.                   s1:=PathPart(buffer)-1
  237.                   s1:=String(len:=(s1-buffer)+2)
  238.                   StrCopy(s1, buffer, len-1)
  239.                   tags:=[ASLFR_WINDOW, win,
  240.                          ASLFR_SLEEPWINDOW, TRUE,
  241.                          ASLFR_TITLETEXT, self.title,
  242.                          ASLFR_INITIALFILE, FilePart(buffer),
  243.                          ASLFR_INITIALDRAWER, s1,
  244.                          TAG_DONE]
  245.                CASE PLV_PopAsl_Type_Font
  246.                   reqtype:=ASL_FONTREQUEST
  247.                   s1:=PathPart(buffer)
  248.                   len:=s1-buffer
  249.                   IF len  -> name/size
  250.                      s1:=String(len)
  251.                      StrCopy(s1, buffer,len)
  252.                   ELSE    -> name
  253.                      s1:=String(StrLen(buffer)+2)
  254.                      StrCopy(s1, buffer)
  255.                   ENDIF
  256.                   x:=Val(FilePart(buffer), {len})
  257.                   tags:=[ASLFO_WINDOW, win,
  258.                          ASLFO_SLEEPWINDOW, TRUE,
  259.                          ASLFO_TITLETEXT, self.title,
  260.                          ASLFO_INITIALNAME, s1,
  261.                          ASLFO_INITIALSIZE, IF len>0 THEN x ELSE 8,
  262.                          TAG_DONE]
  263.             ENDSELECT
  264.             IF (filereq:=AllocAslRequest(reqtype, NIL))
  265.                res:=AslRequest(filereq, tags)
  266.  
  267.                IF res
  268.                   IF self.string THEN DisposeLink(self.string)
  269.  
  270.                   x:=self.type
  271.                   SELECT x
  272.                      CASE PLV_PopAsl_Type_Drawer
  273.                         self.string:=String(StrLen(filereq.drawer)+1)
  274.                         StrCopy(self.string, filereq.drawer)
  275.                      CASE PLV_PopAsl_Type_File
  276.                         self.string:=String(len:=(StrLen(filereq.drawer)+StrLen(filereq.file)+2))
  277.                         StrCopy(self.string, filereq.drawer)
  278.                         AddPart(self.string, filereq.file, len)
  279.                         SetStr(self.string, StrLen(self.string))
  280.                      CASE PLV_PopAsl_Type_Font
  281.                         fontreq:=filereq
  282.                         s:=fontreq.attr::textattr.name
  283.                         self.string:=String(StrLen(s)+1+6)
  284.                         IF self.noext
  285.                            len:=InStr(s,'.font')
  286.                            IF len<>-1 THEN s[len]:=0
  287.                         ENDIF
  288.                         StringF(self.string, '\s/\d', s,fontreq.attr::textattr.ysize)
  289.                         IF self.noext THEN s[len]:="."
  290.                   ENDSELECT
  291.  
  292.                   Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  293.                ENDIF
  294.                FreeAslRequest(filereq)
  295.             ELSE
  296.                Raise("AREQ")
  297.             ENDIF
  298.             self.set(PLA_PopAsl_Disabled, FALSE)
  299.             CloseLibrary(aslbase)
  300.          ELSE
  301.             Raise("ASL")
  302.          ENDIF
  303.          IF s1 THEN DisposeLink(s1)
  304.          -> don't call action function on cancel
  305.          IF res=0 THEN RETURN FALSE
  306.       ELSE
  307.          IF self.imsg.iaddress=self.gad_str
  308. ->            IF code=9
  309. ->            ELSE
  310.                IF self.string THEN DisposeLink(self.string)
  311.                self.string:=String(StrLen(buffer)+1)
  312.                StrCopy(self.string, buffer)
  313. ->            ENDIF
  314.          ENDIF
  315.       ENDIF
  316.    ENDIF
  317.  
  318. ENDPROC TRUE
  319. -><<
  320.  
  321. ->-- new methods ---------------------------------------------
  322.  
  323. ->>> popasl::set
  324. PROC set(attr, value) OF popasl_plugin
  325. DEF x
  326.  
  327.    SELECT attr
  328.       CASE PLA_PopAsl_Disabled
  329.          self.disabled:=value
  330.          Gt_SetGadgetAttrsA(self.gad_bt,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  331.          Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  332.       CASE PLA_PopAsl_Contents
  333.          IF value
  334.             IF self.string THEN DisposeLink(self.string)
  335.             self.string:=String(StrLen(value)+1)
  336.             StrCopy(self.string, value)
  337.             Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  338.          ENDIF
  339.       CASE PLA_PopAsl_Title
  340.         IF value THEN self.title:=value ELSE self.title:=''
  341.       CASE PLA_PopAsl_UserData
  342.          self.userdata:=value
  343.    ENDSELECT
  344.  
  345. ENDPROC
  346. -><<
  347.  
  348. ->>> popasl::get
  349. PROC get(attr) OF popasl_plugin
  350.  
  351.    SELECT attr
  352.       CASE PLA_PopAsl_UserData
  353.          RETURN self.userdata, TRUE
  354.       CASE PLA_PopAsl_Contents
  355.          self.clear_render(NIL)      -> copy input buffer to self.string
  356.          RETURN self.string, TRUE
  357.       CASE PLA_PopAsl_Disabled
  358.          RETURN self.disabled, TRUE
  359.    ENDSELECT
  360.  
  361. ENDPROC -1, FALSE
  362. -><<
  363.  
  364.  
  365.  
  366.  
  367.  
  368.